package net.xdclass.xdclasskafka;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import java.util.Properties;

@SpringBootApplication
public class XdclassKafkaApplication {

    public static void main(String[] args) {
        SpringApplication.run(XdclassKafkaApplication.class, args);
    }


   /* //如果用kafka-client依赖需要在这里注入bean
    @Bean
    public KafkaProducer getKafkaProducer() {
        Properties props = getProperties();
        KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(props);
        return kafkaProducer;
    }

    public static Properties getProperties() {
        Properties props = new Properties();
        props.put("bootstrap.servers", "47.115.53.1:9092,47.115.53.1:9093,47.115.53.1:9094");
        //props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"112.74.55.160:9092");
        // 当producer向leader发送数据时 request.required.acks􏶄参数来设置数据可靠性的级别,分别是0,1,all
        props.put("acks", "all");
        //props.put(ProducerConfig.ACKS_CONFIG,"all");
        // 请求失败,生产者会自动重试,指定是0次,如果启动重试,则会有重复消息的可能性
        props.put("retries", 0);
        //props.put(ProducerConfig.RETRIES_CONFIG,0);
        // 生产者缓存每个分区未发送的消息,缓存的大小是通过batch.size配置指定的,默认值是16kb
        props.put("batch.size", 16384);
        *//**
         * 默认值就是0,消息是立刻发送的.即便batch.size缓冲空间还没有满
         * 如果想减少请求的数量,可以设置 linger.ms大于0,即消息在缓冲区保留的时间,超过
         * 设置的值就会被提交到服务器
         * 通俗解释是,本该早就发出去的消息被迫至少等待linger.ms时间,相当于这时间内积累了更多消息
         * 批量发送减少请求,如果batch被填满或者lingger.ms达到上限,满足其中一个就会被发送
         *//*
        props.put("linger.ms", 1);
        *//**
         * buffer.memory的用来约束Kafka Producer能够使用的内存缓冲的大小,默认值32MB
         * 如果buffer.memory设置的太小,可能导致消息快速的写入内存缓冲里,但sender线程来不及把消息发送到kafka
         * 会造成内存缓冲很快就被写满,而一旦被写满,就会阻塞用户线程,不会继续往Kafka写消息了
         * buffer.memory要大于batch.size否则会报申请内存不足的错误,不要超过物理内存,根据实际情况调整
         * 需要结合实际业务情况压测进行配置
         *//*
        props.put("buffer.memory", 33554432);
        *//**
         * key的序列化器,将用户提供的 key和value对象ProducerRecord 进行序列化处理key.serializer必须被设置
         * 即使消息中没有key序列化器必须是一个实现org.apache.kafka.common.serialization.Serializer接口的类
         * 将key序列化成字节数组
         *//*
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        return props;
    }*/
}
